import json

ROWS = 9
COLS = 9

numQueue = []
resultStack= []

# board = []

board = [
    [9,2,1,5,4,6,7,3,8],
    [6,5,7,8,3,9,2,4,1],
    [4,3,8,0,7,0,6,5,9],
    [5,1,0,0,0,0,0,6,2],
    [7,8,9,0,5,0,4,1,3],
    [2,6,0,0,0,0,0,7,5],
    [1,4,5,0,2,0,3,8,6],
    [3,9,6,4,1,8,5,2,7],
    [8,7,2,3,6,5,1,9,4]
]

def GetRowColFromIndex(idx):
    r = int(idx / ROWS)
    c = int(idx % ROWS)
    return r, c

# TODO: 选出未放入棋盘的数字（备选数字）
# 1，把所有需要用到的数字都放入numQueue中
# 2，遍历棋盘，如果访问到的格子里的值不是0，则表示使用了某个数字，就把数字从numQueue中删除
# 3，步骤2整个棋盘遍历完毕之后，numQueue中剩下的数字就是未放入棋盘的数字，也就是本谜题的备选数字
def calc_rest_nums():
    pass

# TODO: 判断一个数字是否可以放入当前格子
# 1，将r所在行的所有数字放入一个容器，然后利用is_nums_ready函数进行检测
# 2, 将c所在列的所有数字放入一个容器，然后利用is_nums_ready函数进行检测
# 3，将r,c所在的九宫格里的所有数字放入一个容器，然后利用is_nums_ready函数进行检测
def can_put_num(r, c, num):
    return False

# TODO: 传入一个列表，然后检查这个列表是否由1-9的数字组成的
# 1，先对传入列表的数字进行排序
# 2，然后考虑一种方法，判断排序后的数字序列是否为123456789，如果是则返回true, 不是则返回false
def is_nums_ready(dataList):
    return False

# TODO: 从当前位置开始，寻找下一个为值为0的格子
# 1，传入当前位置的索引值，然后按照索引的顺序向下查找，如果发现值为0的格子就返回它的索引
def find_next_zero(start_index):
    return -1

def GetBiggerUnusedNum(num):
    global numQueue
    while num < 9:
        num += 1

        if num in numQueue:
           return num 
    
    return -1

def PutNum(cur_index, num):
    global board, numQueue, resultStack
    r, c = GetRowColFromIndex(cur_index)
    board[r][c] = num
    resultStack.append((cur_index, num))
    numQueue.remove(num)

# TODO: 请实现整个求解过程
def main():
    pass

main()